import axios from 'axios';
import { ElMessage } from 'element-plus';
import router from '@/router';

const service = axios.create({
    baseURL: 'http://localhost:9999',
    timeout: 10000
});

// 请求拦截器 - 自动添加Token
service.interceptors.request.use(
    config => {
        const token = localStorage.getItem('auth_token');
        if (token) {
            config.headers['Authorization'] = `Bearer ${token}`;
        }
        return config;
    },
    error => {
        console.error('请求拦截错误', error);
        return Promise.reject(error);
    }
);

// 响应拦截器 - 统一处理异常
service.interceptors.response.use(
    response => {
        // 处理业务错误码
        const res = response.data;
        if (res.code !== 200) {
            // Token失效处理
            if (res.code === 401) {
                handleUnauthorized();
            } else {
                ElMessage.error(res.message || '请求失败');
            }
            return Promise.reject(new Error(res.message || '请求失败'));
        }
        return res;
    },
    error => {
        // 处理HTTP状态码
        console.error('响应错误', error);

        // 检查是否有响应且状态码为401
        if (error.response && error.response.status === 401) {
            handleUnauthorized();
        } else {
            const message = error.response?.data?.message || '请求失败，请稍后再试';
            ElMessage.error(message);
        }

        return Promise.reject(error);
    }
);

// 统一处理未授权状态
function handleUnauthorized() {
    ElMessage.error('登录已过期，请重新登录');
    localStorage.removeItem('auth_token');
    localStorage.removeItem('user_info'); // 清除用户信息

    // 延迟跳转，确保提示可见
    setTimeout(() => {
        router.push('/login');
    }, 1500);
}

export default service;